#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>

//使用系统调用open write umask close
int main()
{
    umask(0);
    //打开文件，文件不存在就创建--> O_CREAT
    //写入地时候将文件中地内容做清空 --> O_TRUNC
    //O_APPEND 以追加的形式打开文件
    int fd = open("log.txt" , O_WRONLY | O_CREAT | O_APPEND , 0666);
    //当我们没有设置权限掩码地时候会去使用系统地权限掩码
    if(fd < 0)//open 成功会返回所打开地这个文件地描述符，失败返回-1
    {
        perror("open");
        return 1;
    }
    //向文件中写入数据
    //const char* str = "hello , linux;hello , world!\n";
    const char* str = "hello , linux\n";
    write(fd , str , strlen(str));//向文件写入字符串不用管字符串最后的 \0 ，从文件中读取的时候记得添加就可以了
    //关闭文件
    close(fd);
    return 0;
}

////利用位图传递标记位
//#define VERSION1 (1<<0)
//#define VERSION2 (1<<1)
//#define VERSION3 (1<<2)
//#define VERSION4 (1<<3)
//#define VERSION5 (1<<4)
//
//void ShowVersion(int flags)
//{
//    if(flags & VERSION1) printf("VERSION1\n");
//    if(flags & VERSION2) printf("VERSION2\n");
//    if(flags & VERSION3) printf("VERSION3\n");
//    if(flags & VERSION4) printf("VERSION4\n");
//    if(flags & VERSION5) printf("VERSION5\n");
//}
//
//int main()
//{
//    ShowVersion(VERSION1);
//    printf("---------------\n");
//
//    ShowVersion(VERSION1 | VERSION2 | VERSION3 | VERSION4 | VERSION5);
//    return 0;
//}

//./mycat filename
//int main(int argc , char* argv[])
//{
//    printf("我是进程 : %d\n" , getpid());
//    if(argc != 2)
//    {
//        printf("Usage: %s filename\n" , argv[0]);
//        exit(2);
//    }
//
//    //打开文件
//    //chdir("/home/zjx/Test");
//    //FILE* fp = fopen("log.txt" , "w");
//    FILE* fp = fopen(argv[1] , "r");
//
//    //以"w" 的形式打开文件做写入，如果文件存在并且有数据就会将文件中的内容清空然后再写入
//    //如果文件不存在就会新建文件
//    //我们可以利用这个性质，写一个专门清空文件内容的程序
//    //更改进程的cwd ，使用系统调用 chdir
//    if(!fp)
//    {
//        perror("fopen");
//        return 1;
//    }
//    //char* tmp = "hello, world\n";
//    //对文件写入数据，使用fwrite , 以二进制的形式做写入
//    //fwrite(tmp , strlen(tmp) , 1, fp);
//    
//    //读取文件内容，打印出来
//    while(1)
//    {
//        char buffer[1024];
//        buffer[0] =0;//置空
//        //使用freed 读取数据
//        size_t n = fread(buffer , 1 , sizeof(buffer)-1 , fp);//我们自己处理的时候最后一个位置放\0
//        if(n > 0)
//        {
//            //此处我们使用freed 以字节为单位进行读取，所以到了这个地方就意味着读取成功
//            buffer[n] = 0;
//            printf("%s", buffer);//其实就是一个一个地读然后一个一个地打印
//        }
//        else if(feof(fp))//利用feof 来判断当前文件是否读取完毕
//        {
//            break;
//        }
//    }
//    //while(1);
//
//    fclose(fp);
//    return 0;
//}
